package net.huashitong.ssydt.provider.comment.service;

import net.huashitong.comment.vo.BaseCommentQueryVO;
import net.huashitong.comment.vo.CommentInVo;
import net.huashitong.comment.vo.CommentQueryVO;
import net.huashitong.comment.vo.HstComment;
import net.huashitong.comment.vo.NotCheckPassVO;
import net.huashitong.comment.vo.UserCommonQueryVO;

import java.util.List;

/**
 * @author <a href="mailto:yhy23456@163.com">huiyang.yu</a>
 * @since 2017.09.20
 */
public interface SdkCommentService {
    /**
     * <p>热门评论列表</p>
     * <p>根据点赞数倒叙排列</p>
     * <p>当传入userId时，同时获取该用户在该资源下所有评论（含未审核）</p>
     *
     * @param commonQueryVO
     * @return
     */
    List<HstComment> getHotCommonList(CommentQueryVO commonQueryVO);

    /**
     * <p>用户评论列表</p>
     * <p>根据传入的userId获取该用户下的所有评论</p>
     *
     * @param userCommonQueryVO
     * @return
     */
    List<HstComment> getUserCommonList(UserCommonQueryVO userCommonQueryVO);

    /**
     * <p>最新评论列表</p>
     * <p>根据id倒叙排列</p>
     * <p>当传入userId时，同时获取该用户在该资源下所有评论（含未审核）</p>
     *
     * @param commonQueryVO
     * @return
     */
    List<HstComment> getNewestCommonList(CommentQueryVO commonQueryVO);

    /**
     * <p>获取评论信息</p>
     * <p>根据commentId获取记录</p>
     *
     * @param commentId
     * @return
     */
    HstComment getComments(Long commentId);

    /**
     * <p>发布评论</p>
     *
     * @param commentInVo
     * @return
     */
    void postComments(CommentInVo commentInVo);

    /**
     * <p>删除评论</p>
     * <p>根据commentId删除记录</p>
     *
     * @param commentId
     * @return
     */
    void deleteComments(Long commentId);

    /**
     * <p>获取是否点赞</p>
     * <p>根据commentId和userId获取记录</p>
     *
     * @param commentId
     * @param userId
     * @return
     */
    Boolean getCommentUsersPraise(Long commentId, String userId);

    /**
     * * <p>执行评论点赞</p>
     *
     * @param commentId
     * @param userId
     * @return
     */
    void postCommentUsersPraise(Long commentId, String userId);

    /**
     * * <p>取消评论点赞</p>
     *
     * @param commentId
     * @param userId
     * @return
     */
    void deleteCommentUsersPraise(Long commentId, String userId);

    /**
     * 用户非审核通过的评论数量
     *
     * @param commonQueryVO
     * @return
     */
    Integer getNonCheckPass(NotCheckPassVO commonQueryVO);

    /**
     * 获取资源的评论数
     *
     * @param baseCommentQueryVO
     * @return
     */
    Integer getCommentsNumber(BaseCommentQueryVO baseCommentQueryVO);
}
